perm filename ROMITU.MF[1,3]2 blob
sn#520981 filedate 1980-07-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00039 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00004 00002 % These upper-case Roman and Greek alphabets were prepared by D. E. Knuth in November,
C00006 00003 "Upper case Greek Gamma"
C00007 00004 "Upper case Greek Delta"
C00008 00005 "Upper case Greek Theta"
C00010 00006 "Upper case Greek Lambda"
C00011 00007 "Upper case Greek Xi"
C00013 00008 "Upper case Greek Pi"
C00014 00009 "Upper case Greek Sigma"
C00016 00010 "Upper case Greek Upsilon"
C00018 00011 "Upper case Greek Phi"
C00019 00012 "Upper case Greek Psi"
C00020 00013 "Upper case Greek Omega"
C00022 00014 "The letter A"
C00024 00015 "The letter B"
C00026 00016 "The letter C"
C00028 00017 "The letter D"
C00029 00018 "The letter E"
C00031 00019 "The letter F"
C00033 00020 "The letter G"
C00036 00021 "The letter H"
C00037 00022 "The letter I"
C00038 00023 "The letter J"
C00039 00024 "The letter K"
C00041 00025 "The letter L"
C00042 00026 "The letter M"
C00044 00027 "The letter N"
C00046 00028 "The letter O"
C00047 00029 "The letter P"
C00048 00030 "The letter Q"
C00050 00031 "The letter R"
C00052 00032 "The letter S"
C00055 00033 "The letter T"
C00056 00034 "The letter U"
C00057 00035 "The letter V"
C00058 00036 "The letter W"
C00061 00037 "The letter X"
C00063 00038 "The letter Y"
C00065 00039 "The letter Z"
C00067 ENDMK
C⊗;
% These upper-case Roman and Greek alphabets were prepared by D. E. Knuth in November,
% 1979, inspired by the Monotype alphabets used in {\sl The Art of Computer Programming}.
% For text spacing, set $\\{mi}=0$; for math spacing, set $\\{mi}=1$.
% Character codes \¬000--\¬012 and \¬101--\¬132 are generated.
new mc,lbowl,rbowl,rstem,rv,hic; % quantities used to compute spacing
mc=mi/pu; % converts to relative units when $\\{mi}=1$
lbowl=.3phh.slant+.5pu; % used at left of upper-case bowl
rbowl=.7phh.slant-.5pu; % used at right of upper-case bowl
rstem=phh.slant+(ucs+2sc-1.5)pu; % used at right of tall stem
rv=phh.slant+(ucs+2sc-1)pu; % used at right of tall diagonal
hic=1-.5mi; % used when half the italic correction goes into \\{rtcorr}
"Upper case Greek Gamma";
call charbegin('000,11,2sc,sc-mc(armic-2.5pu),phh,0,mi[armic,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper stem serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
call `e arm(1,3,4). % upper arm and serif
"Upper case Greek Delta";
call charbegin('001,15,0,0,phh,0,0);
hpen; lft0x2=round u; rt4x4=round(r-u); bot0y2=0; bot4y4=0;
top4y5=hh+o+oo; y6=y5=y8;
x6-x2=x4-x5; rt4x5=rt0x8; x6=x8-del; x1=x2; x3=x4;
vpen; bot8y1=0; y3=y1;
w9 draw 1..3; % bar line
rpen#; w9 draw 5..4; % erase excess at lower right
hpen; w4 draw 5..4; % right diagonal
lpen#; w4 draw 6..2; w9 draw 6..2; % erase excess at left
hpen; w0 draw 8..6..6..2; % left diagonal
y7=y4; rt0x7=rt4x4;
w0 draw 2..7..7..8. % sharpen lower right corner
"Upper case Greek Theta";
call charbegin('002,14,mc.lbowl,-mc(rbowl-pu),ph,pdd,mi[rbowl,pu]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
new sqrttwo; sqrttwo=sqrt save; % super-superellipse
lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1; % axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5); % left part of bowl
call `b darc(1,3,w5); % right part of bowl
lft0x4=round(rt5x2+u); x5=r-x4; y4=y5=.5[y1,y2];
vpen;
if ucs=0: w9 draw 4..5; % bar line
else: call bar(4,5,9); % bar line
x6=x7=x4; x8=x9=x5; y7=y9=.6hh; y6=y8=.4hh;
w0 draw 6..7; % left serif
draw 8..9; % right serif
fi;
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"Upper case Greek Lambda";
call charbegin('003,11,2sc,2sc,phh,0,0);
hpen; new w99; w99=round .5[w4,w5];
lft0x1=round 1.5u; bot0y1=0;
rt99x4=round(r-1.5u); bot99y4=0;
top0y3=top99y2=hh+o+oo;
x3-x1=x4-x2; rt99x2=rt0x3+del;
w99 draw 2..4; w0 draw 2..3; % right diagonal stroke
lpen#; w99 draw 3..1; % erase excess at upper left
hpen; w0 draw 3..1; % left diagonal stroke
if ucs≠0:
call `a dserif(1,0,3,-ucs);
call `b dserif(1,0,3,+ucs); % left serifs
call `c serif(4,99,2,-ucs);
call `d serif(4,99,2,+ucs); % right serifs
fi.
"Upper case Greek Xi";
call charbegin('004,11,0,-.5mc(phh.slant-.5pu),phh,0,hic(phh.slant-.5pu));
new w99;
if ucs=0: w99=w4;
else: w99=round .9[w6,w9];
fi;
vpen; top99y1=hh; y1=y2; y3=y4=good99 .5hh; bot99y5=0; y5=y6;
lft99x1=round u; rt99x2=round(r-u); x5=x1; x6=x2;
lft99x3=round 2u; rt99x4=round(r-2u);
if ucs=0: w99 draw 1..2; % upper bar
draw 3..4; % middle bar
draw 5..6; % lower bar
else: call bar(1,2,99); % upper bar
call bar(3,4,99); % middle bar
call bar(5,6,99); % lower bar
new ss; ss=ucs.aspect.u+eps;
if bot99y1-ss<top99y3+ss: new ss; bot99y1-ss=top99y3+ss+eps;
fi;
x7=x10=x1; x8=x9=x3; x11=x14=x2; x12=x13=x4;
bot6y7=bot99y1-ss; top6y8=top99y3+ss;
bot6y9=bot99y3-ss; top6y10=top99y5+ss;
y11=y7; y12=y8; y13=y9; y14=y10;
w6 draw 7..1; draw 11..2; % upper serifs
draw 8..9; draw 12..13; % middle serifs
draw 10..5; draw 14..6; % lower serifs
fi.
"Upper case Greek Pi";
call charbegin('005,13,2sc,2sc-.5mc.rstem,phh,0,hic.rstem);
hpen; lft4x1=round 2u; x2=x1;
rt4x3=round(r-2u); x4=x3;
top4y1=hh; y1=y3;
bot4y2=0; y2=y4;
w4 draw 1..2; % left stem
w4 draw 3..4; % right stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper left serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower left serif
call `e serif(3,4,4,-.5ucs);
call `f serif(3,4,4,ucs); % upper right serif
call `g serif(4,4,3,-ucs);
call `h serif(4,4,3,ucs); % lower right serif
fi;
w0 draw 1..3. % bar
"Upper case Greek Sigma";
call charbegin('006,13,0,sc-.5mc.armic,phh,0,hic.armic);
new w99; w99=round .25[w6,w9];
hpen; lft0x1=round u; rt0x2=round(r-1.5u); x3=round(x2+.5u);
top0y1=hh; y2=y1; y3=y2-as;
vpen; bot99y4=0; y5=y4; top6y6=top99y4; y7=y6; y8=y7+as;
x4=x6=x1; x5=x7=x2; x8=x3;
call `a arm(1,2,3); % upper arm and serif
call `b arm(6,7,8); % lower arm and serif
w99 draw 4..5;
if ucs=0: draw 5..8; % thicken lower arm
else: if w0≠w4: draw |w99|5..|w6|8; % thicken lower arm
else: draw 5..8; % thicken lower arm
fi;
fi;
hpen; x9=x1; x10=.5[x9,x11]; x16=round 5u; lft4x12=lft0x15;
lft4x99=x16; rt4x99=rt0x11; lft4x13=lft0x1; rt4x13=rt0x14;
bot0y9=0; y10=.5[y9,y11]; y11=y16=.5hh; y12=y15; y13=y14=y1;
new aa,bb; lft0x15=aa[lft0x1,x16]; y15=aa[y1,y16];
lft0x15=bb[x9,x11]; y15=bb[y9,y11];
w4 draw 13..12; % upper diagonal
w0 draw 1..15; % sharpen upper left corner
rpen#; w4 draw 10..11; % erase excess at right
lpen#; w99 draw 9..10; % erase excess at left
hpen; w0 draw 9..11; % lower diagonal
draw 14..11. % sharpen middle corner
"Upper case Greek Upsilon";
call charbegin('007,14,mc(.8phh.slant+.5pu),-mc(.8phh.slant-3pu),
phh,0,mi[.8phh.slant-.5pu,2.5pu]);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; y2=.5hh;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-1.25ucs);
call `b serif(1,4,2,1.25ucs); % serif
fi;
new w99; w99=round .5w4;
rt99x3=rt4x2; lft99x4=lft4x2;
lft99x5=x2-.25u; x7=x9=x13=10.5u;
vpen; rt8x11=round(r-u); y11=.8hh;
top8y13=top6y9=hh+o; bot8y13=bot6y7;
y3=y4=y5=y6=y2; y7=y8; y9=y10; y11=y12; y13=y14;
x3+x4=x5+x6=x7+x8=x9+x10=x11+x12=x13+x14; % left-right symmetry
w9 draw 13{1,0}..11{0,-1}; % right stroke
draw 14{-1,0}..12{0,-1}; % left stroke
hpen; w99 ddraw 5{0,1}..9{1,0}, 3{0,1}..7{1,0};
ddraw 6{0,1}..10{-1,0}, 4{0,1}..8{-1,0}. % middle strokes
"Upper case Greek Phi";
call charbegin('010,13,mc(.5phh.slant+.5pu),-mc(.5phh.slant-.5pu),
phh,0,mi[.5phh.slant-.5pu,0]);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; top4y2=hh;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower serif
fi;
x3=x1; y3=.8hh; y4=y5=.2hh;
lft5x4=round u; x3-x4=x5-x3; % left-right symmetry
call `e darc(3,4,w5); call `f darc(3,5,w5). % bowl
"Upper case Greek Psi";
call charbegin('011,14,mc(.8phh.slant),-.5mc(.8phh.slant-2.5pu),
phh,0,hic(.8phh.slant-.5pu)+mi.pu);
hpen; x1=good4 .5r; bot4y1=0; x2=x1; top4y2=hh;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower serif
fi;
x3=x1; y3=.2hh; lft4x6=u; x4=good4 3u; y4=.6hh; y6=.8hh;
y4=y5; y6=y7; x3-x4=x5-x3; x3-x6=x7-x3; % left-right symmetry
w4 draw 6{1,0}..4{0,-1}..3{1,0}; % left stroke
draw 7{-1,0}..5{0,-1}..3{-1,0}. % right stroke
"Upper case Greek Omega";
call charbegin('012,13,mc(2/3pe.slant+.5pu),-.5mc(.75phh.slant-.5pu),
phh,0,hic(.75phh.slant-.5pu));
hpen; top0y1=hh+o; y2=.7hh; rt5x2=rt0x8=round(r-u);
vpen; bot7y8=bot6y6=0; y4=y8; x4=x6=good0 8.5u;
x1+x1=x2+x3=x4+x5=x6+x7=x8+x9=r; % left-right symmetry
y2=y3; y4=y5; y6=y7; y8=y9;
w7 draw 4..8; % right bar
draw 5..9; % left bar
lpen#; .5(x6-x7) draw 2{0,-1}..6{x6-x2,5/7(y6-y2)}; % erase middle
rpen#; .5(x6-x7) draw 3{0,-1}..7{x7-x3,5/7(y7-y3)}; % ditto
call `a arc(1,2,w5); call `b arc(1,3,w5); % bowl
hpen; draw |w5|2{0,-1}..|w0|6{x6-x2,5/7(y6-y2)}; % right diagonal
draw |w5|3{0,-1}..|w0|7{x7-x3,5/7(y7-y3)}; % left diagonal
if ucs≠0: x12=x8; bot0y10=0; top0y12=2/3e;
x10+x11=x12+x13=r; y10=y11; y12=y13;
if w7=w9: x10=x12;
else: x10+.5u=x12;
rpen#; .5u+w0 draw 10..12; % erase excess at right
lpen#; .5u+w0 draw 11..13; % erase excess at left
fi;
hpen; w0 draw 10..12; draw 11..13; % serifs
fi.
"The letter A";
call charbegin(`A,13,2sc,2sc,phh,0,0);
hpen; new w99; w99=round .5[w4,w5];
lft0x1=round 1.5u; bot0y1=0;
rt99x4=round(r-1.5u); bot99y4=0;
top0y3=top99y2=hh+o+oo;
x3-x1=x4-x2; rt99x2=rt0x3+del;
w99 draw 2..4; w0 draw 2..3; % right diagonal stroke
y5=y6=e;
new aa,bb; % auxiliary variables for intersection of lines
x5-1=aa[x1,x3]; y5=aa[y1,y3];
x6+1=bb[x4,x2]; y6=bb[y4,y2];
w0 draw 5..6; % bar line
lpen#; w99 draw 3..5; % erase excess at upper left
hpen; w0 draw 3..1; % left diagonal stroke
if ucs≠0:
call `a dserif(1,0,3,-ucs);
call `b dserif(1,0,3,+ucs); % left serif
call `c serif(4,99,2,-ucs);
call `d serif(4,99,2,+ucs); % right serif
fi.
"The letter B";
call charbegin(`B,12,2sc,-.5mc(.75phh.slant-.5pu),phh,0,hic(.75phh.slant-.5pu));
hpen; lft4x1=lft4x2=round 2u; top4y1=hh;
bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,.5ucs); % lower serif
fi;
x3=1/2[2u,r]; y3=y1;
rt5x4=round(r-u); y4=good0 1/2hh;
w0 draw 1..3; % upper bar line
call `e darc(3,4,w5); % upper bowl
x5=x1; x6=x3+1/2u; y4=y5=y6;
rt5x7=round(r-1/2u); bot5y7=0;
w0 draw 5..6; % middle bar line
call `f darc(6,7,w5); % lower bowl
x8=x6; y8=y7; w0 draw2..8. % lower bar line
"The letter C";
if ucs≠0: call charbegin(`C,13,mc.lbowl,-.5mc(phh.slant-.5pu),
phh,0,hic(phh.slant-.5pu));
else: call charbegin(`C,11,mc.lbowl,-.5mc(phh.slant-.5pu),
phh,0,hic(phh.slant-.5pu));
fi;
hpen;
rt0x1=round(r-u); x5=x1; lft5x3=round u; x2=x4=.5r+u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if ucs=0: x6=r+2u; new aa; x1=aa[x2,x6];
y1=(sqrt(1-aa.aa))[y6,y2];
else: if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
fi;
x6=x1; x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
w0 ddraw 1..7,8..7; % upper serif
lpen#; w5 draw (6..)1..2{-1,0}; % erase spurious part
fi;
hpen; y5=hh-y1;
w0 draw (6..)1..2{-1,0}; % upper right stroke
call `a darc(2,3,w5); % main stroke
w0 draw 4{1,0}..5(..6). % lower right stroke
"The letter D";
call charbegin(`D,13,2sc,-mc(rbowl),phh,0,mi[rbowl+.5pu,0]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,.5ucs); % lower serif
fi;
x3=x4=6u; rt5x5=round(r-.5u);
y3=y1; y4=y5=y2;
w0 draw 1..3; % upper bar line
call `e darc(3,5,w5); % bowl
w0 draw 4..2. % lower bar line
"The letter E";
call charbegin(`E,12,2sc,sc-.5mc.armic,phh,0,hic.armic);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper stem serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,.5ucs); % lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.25u); x6=round(x4+.5u); y5=y2; y6=y5+as;
call `e arm(1,3,4); % upper arm and serif
call `f arm(2,5,6); % lower arm and serif
x7=x1; y7=.52[y2,y1]; y8=y7;
if ucs≠0: x8=x9=x10=good0(r-4.5u); y9=y8+.7as; y10=y8-.7as;
if w0=w4: w0 draw 9..10; % middle arm serif
else: x11=x8-u; y11=y8;
minvr 0; minvs 0;
w0 ddraw 11{1,0}..10{0,-1}, 8..10;
ddraw 11{1,0}..9{0,1}, 8..9; % middle arm serif
minvr .5; minvs .5;
fi;
else: x8=x4-u;
fi;
w0 draw 7..8. % middle arm
"The letter F";
call charbegin(`F,12,2sc,sc-mc(armic-2.5pu),phh,0,mi[armic,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper stem serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y1; y4=y3-as;
call `e arm(1,3,4); % upper arm and serif
x7=x1; y7=y8=.5[y1,y2];
if ucs≠0: x8=x9=x10=good0 7u; y9=y8+.7as; y10=y8-.7as;
if w0=w4: w0 draw 9..10; % lower arm serif
else: x11=x8-u; y11=y8;
minvr 0; minvs 0;
w0 ddraw 11{1,0}..10{0,-1}, 8..10;
ddraw 11{1,0}..9{0,1}, 8..9; % lower arm serif
minvr .5; minvs .5;
fi;
else: x8=x4-u;
fi;
w0 draw 7..8. % lower arm
"The letter G";
if ucs=0: if m<.6hh: call charbegin(`G,14,mc.lbowl,
sc-mc(2/3phh.slant+(sc-1.5)pu),
phh,0,(1-mi)(2/3phh.slant+(sc-1.5)pu));
else: call charbegin(`G,14,mc.lbowl,
1-mc(px.slant+(sc-1.5)pu),
phh,0,(1-mi)(px.slant+(sc-1.5)pu));
fi;
else: call charbegin(`G,14,mc.lbowl,
sc-mc(phh.slant+(sc-1.5)pu),
phh,0,(1-mi)(phh.slant+(sc-1.5)pu));
fi;
hpen;
rt0x1=rt4x9=round(r-2u); lft5x3=round u; x2=x4=7.5u;
top0y2=hh+o; bot0y3=-o; y3=y4; y6=.5[y2,y4];
if m<.6hh: y1=good6 2/3hh; else: y1=good6 m;
fi;
x6=x1; y9=good6 .1[e,m]; x9=x10;
if ucs≠0: x7=x1; top0y7=hh; lft0x8=lft5x1; y8=y1;
w0 ddraw 1..7,8..7; % upper serif
lpen#; w5 draw (6..)1..2{-1,0}; % erase spurious part
fi;
hpen; w0 draw (6..)1..2{-1,0}; % upper right stroke
call `a darc(2,3,w5); % main stroke
if w0=w4: w0 draw 4{1,0}..9{0,1}; % lower right stroke
bot0y10=0; draw 9..10; % stem and spur
else: y11=y10=y13=1/3y9;
lft0x11=lft4x9;
rt0x12=rt0x13=rt4x9; bot0y12=0;
w0 draw 4{1,0}..11..9{0,1}; % lower right stroke
w4 draw 9..10; % stem
w0 ddraw 13..12, 11{0,-1}..12{2(x12-x11),y12-y11}; % spur
fi;
if ucs<2.25: call `b serif(9,4,10,-2.25);
else: call `b serif(9,4,10,-ucs); % lower serif
fi;
if ucs>0: call `c serif(9,4,10,+1.25);
fi.
"The letter H";
call charbegin(`H,13,2sc,2sc-.5mc.rstem,phh,0,hic.rstem);
hpen; lft4x1=round 2u; x2=x1;
rt4x3=round(r-2u); x4=x3;
top4y1=hh; y1=y3;
bot4y2=0; y2=y4;
w4 draw 1..2; % left stem
w4 draw 3..4; % right stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % upper left serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower left serif
call `e serif(3,4,4,-ucs);
call `f serif(3,4,4,ucs); % upper right serif
call `g serif(4,4,3,-ucs);
call `h serif(4,4,3,ucs); % lower right serif
fi;
x5=x1; x6=x3; y5=y6; y5=.52hh;
w0 draw 5..6. % bar
"The letter I";
call charbegin(`I,6,0,-.5mc(phh.slant-.25pu),phh,0,hic(phh.slant-.25pu));
hpen; x1=x2=good4 .5r; top4y1=hh; bot4y2=0;
w4 draw 1..2; % stem
new ss;
if ucs≠0: ss=1.1ucs; else: ss=2.25-.5w4/u;
fi;
call `a serif(1,4,2,-ss); call `b serif(1,4,2,ss); % upper serif
call `c serif(2,4,1,-ss); call `d serif(2,4,1,ss). % lower serif
"The letter J";
call charbegin(`J,9,0,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; rt4x1=round(r-2u); top4y1=hh; y2=.2hh; x2=x1;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % serif
fi;
lft0x4=lft3x5; rt3x5=round 2.75u; y4=y5=1/6hh;
x3=.5[x4,x2]; bot0y3=-o;
call `c arc(3,2,w4); % tail
w0 draw 3{-1,0}..4{0,1}; cpen; w3 draw 5. % bulb
"The letter K";
call charbegin(`K,14,2sc,2sc-.5mc(phh.slant+(ucs+2sc-1.5)pu),
phh,0,hic(phh.slant+(ucs+2sc-1.5)pu));
hpen; lft4x1=round 2u; x1=x2=x5;
rt5x3=rt0x4=round(r-2u);
top4y1=top0y4=hh; bot4y2=bot5y3=0; y5=1/3hh;
new aa,bb; % auxiliaries for intersection of lines
rt5x6=aa[rt5x1,rt5x3]; y6=aa[y1,y3];
rt5x6=bb[x5,x4]; y6=bb[y5,y4];
w5 draw 6..3; % lower diagonal
lpen#; w5 draw 4..5; % erase excess
hpen; w4 draw 1..2; % stem
w0 draw 4..5; % upper diagonal
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % upper stem serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower stem serif
call `e dserif(4,0,5,-ucs);
call `f dserif(4,0,5,ucs); % upper diagonal serif
call `g serif(3,5,1,-ucs);
call `h serif(3,5,1,ucs); % lower diagonal serif
fi.
"The letter L";
call charbegin(`L,12,2sc,sc,phh,0,0);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % upper stem serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,.5ucs); % lower stem serif
fi;
rt0x3=round(r-1.5u); x4=round(x3+.5u); y3=y2; y4=y3+as;
call `e arm(2,3,4). % arm and arm serif
"The letter M";
call charbegin(`M,16,2sc-.5mc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
if fudge≠1: new w0,w4; % lines will be thinner in fudged styles
w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft0x1=round 2u; x1=x2; top0y1=hh; bot0y2=0;
new w99; w99=round .8[w0,w4];
rt99x3=round(r-2u); x3=x4; top99y3=hh; bot99y4=0;
lft99x5=lft0x1+del; lft0x6=lft99x3-del; y1=y5; y6=y3;
x7-x5=x6-x8; lft4x7=lft0x8; bot4y7=0; y8=y7;
w0 draw 5..1..1..2; % left stem
w4 draw 5..7; % left diagonal
rpen#; w4 draw 8..6; % erase excess at lower right
hpen; w0 draw 8..6..6..3; % right diagonal
w99 draw 3..4; % right stem
if ucs≠0: call `a dserif(2,0,1,-ucs);
call `b dserif(2,0,1,ucs); % lower left serif
call `c serif(5,4,7,-ucs-del/u); % upper left serif
call `d serif(3,99,4,ucs); % upper right serif
call `e serif(4,99,3,-ucs);
call `f serif(4,99,3,ucs); % lower right serif
fi;
if fudge≠1: new w0,w4; % restore normal sizes in fudged styles
w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter N";
call charbegin(`N,14,2sc,2sc-.5mc(rstem-pu),phh,0,hic.rstem+.5mi.pu);
hpen; lft0x1=round(2+.25ucs)u; x1=x2; top0y1=hh; bot0y2=0;
w0 draw 1..2; % left stem
rt0x3=round(r-2u); x3=x4; top0y3=hh; bot0y4=0;
lft5x5=lft0x1+del; lft5x6=lft0x4-del; y1=y5; y6=y4;
draw 1..5; w5 draw 5..6; w0 draw 6..4; % diagonal
rpen#; w5 draw 4..3; % erase excess at lower right
hpen; w0 draw 4..3; % right diagonal
if ucs≠0: call `a dserif(2,0,1,-ucs);
call `b dserif(2,0,1,ucs); % lower left serif
call `c serif(5,5,6,-ucs-del/u); % upper left serif
call `d dserif(3,0,4,-ucs);
call `e dserif(3,0,4,ucs); % upper right serif
fi.
"The letter O";
call charbegin(`O,14,mc.lbowl,-mc(rbowl-.5pu),phh,0,mi[rbowl,.5pu]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
new sqrttwo; sqrttwo=sqrt save; % super-superellipse
lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1; % axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5); % left part of bowl
call `b darc(1,3,w5); % right part of bowl
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter P";
call charbegin(`P,12,2sc,-mc(.75phh.slant-3pu),phh,0,mi[.75phh.slant-.5pu,2.5pu]);
hpen; lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower serif
fi;
x3=x4=7u; rt5x5=round(r-u); x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3; % upper bar line
call `e darc(3,5,w5); % bowl
w0 draw 4..6. % lower bar line
"The letter Q";
call charbegin(`Q,14,mc.lbowl,-mc.rbowl,phh,pdd,mi[rbowl,0]);
hpen;
if fixwidth≠0: new save; save=sqrttwo;
new sqrttwo; sqrttwo=sqrt save; % super-superellipse
lft5x2=round 1.5u;
else: lft5x2=round u;
fi;
x1=r-x1; % axis of left-right symmetry
top0y1=hh+o;
bot0y2=-o; y3=y2; x3=r-x2;
call `a darc(1,2,w5); % left part of bowl
call `b darc(1,3,w5); % right part of bowl
x4=x5=4.5u; y4=0;
new aa; x5=aa[x1,x2]; y5=(sqrt(1-aa.aa))[.5y1+.5y2,y2];
x6=6.5u; y6=.15hh+1.5w6;
w0 draw (4..)5..6{1,0}; % left part of tail
vpen; x7=x8=x9=11u; bot8y8=bot6y9=-dd; top6y7=top8y8;
x10=round 13u; top8y10=0;
w6 ddraw 6{1,0}..7{1,0},6{1,0}..9{1,0}; % middle part of tail
w9 draw 8{1,0}..10{0,1}; % right part of tail
if fixwidth≠0: new sqrttwo; sqrttwo=save;
fi.
"The letter R";
hpen;
if ucs=0: call charbegin(`R,12.5,2sc,-mc(.75phh.slant-.75pu),
phh,0,mi[.75phh.slant-.75pu,0]);
rt5x5=round(r-.75u);
else: call charbegin(`R,14,2sc,0,phh,0,.75phh.slant-1.5pu);
rt5x5=round(r-2u);
fi;
lft4x1=round 2u; x2=x1; top4y1=hh; bot4y2=0;
w4 draw1..2; % stem
if ucs≠0:
call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,.5ucs); % upper serif
call `c serif(2,4,1,-ucs);
call `d serif(2,4,1,ucs); % lower serif
fi;
x3=x4=7u; x6=x1;
y3=y1; y6=y4=y5=good6 .5hh;
w0 draw 1..3; % upper bar line
call `e darc(3,5,w5); % bowl
w0 draw 4..6; % lower bar line
if ucs=0: rt4x7=round(r-u); bot4y7=0;
w4 draw 4..7; % diagonal stroke
else: x8=good5(x5-1.25u); lft5x8=lft0x7; rt5x8=rt0x9;
y7=y8=y9=1/3[y2,y4];
y13=5/6[y2,y4]; x13=1/sqrttwo[x4,x8];
draw |w0#|4{1,0}..|.25[w0,w5]|13{x8-x4,2/3(y8-y4)}..
|w5#|8{0,-1}; % upper tail
y10=y11; bot0y10=-o; y12=.25[y2,y4];
x10=.5[x7,x12]; x11=.5[x9,x12]; rt0x12=round(r-.5u);
w0 ddraw 7{0,-1}..10{1,0}..12{0,1},
9{0,-1}..11{1,0}..12{0,1}; % lower tail and hook
fi.
"The letter S";
call charbegin(`S,10,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
new w99; w99=round .3[w0,w4];
hpen; top0y1=hh+o; bot0y5=-o;
x3=.5r; y3=.52hh; lft99x2=round u; rt99x4=round(r-u);
if ucs=0: x1=x5=x3; x6=x2; x7=x4;
y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke
draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke
else: if w0=w4: x1=x5=x3; x6=x2; x7=x4;
y6=1/3[top0 0,y3]; y7=1/4[bot0 hh,y3];
w0 draw 6{x5-x6,3(y5-y6)}..5{1,0}; % lower left stroke
draw 7{x1-x7,2(y1-y7)}..1{-1,0}; % upper right stroke
x8=x9=x6; y9=y6+ucs.aspect.u+eps; bot0y8=0;
x10=x11=x7; y11=y7-ucs.aspect.u-eps; top0y10=hh;
w0 draw 8..9; % lower serif
draw 10..11; % upper serif
else: x1=x3-.5u; x5=x3+.5u; lft0x6=round u; rt0x7=round(r-1.5u);
y6=good6 1/3hh-1; y7=good6 2/3hh+1;
bot0y8=0; y9=y6; x8=x6; rt4x6=rt0x9;
top0y10=hh; y11=y7; x10=x7; lft4x7=lft0x11;
w0 ddraw 6..8,9..8; % lower serif
ddraw 7..10,11..10; % upper serif
rpen#; w4 draw 6{0,-1}..5{1,0}; % erase excess
lpen#; w4 draw 7{0,1}..1{-1,0}; % ditto
hpen; w0 draw 6{0,-1}..5{1,0}; % lower left stroke
draw 7{0,1}..1{-1,0}; % upper right stroke
fi;
fi;
call `a sdraw(1,2,3,4,5,w99,round(pixels.pwv.aspect+blacker),
-hh/(50u)). % middle stroke
"The letter T";
call charbegin(`T,13,sc+.75mc.phh.slant,sc-mc(armic-2.5pu),
phh,0,mi[armic,2.5pu]);
hpen; x1=good4 6.5u; x2=x1;
top4y1=hh; bot4y2=0;
w4 draw 1..2; % stem
if ucs≠0: call `a serif(1,4,2,-.5ucs);
call `b serif(1,4,2,.5ucs); % upper bracketing
call `c serif(2,4,1,-1.25ucs);
call `d serif(2,4,1,1.25ucs); % lower serif
fi;
rt0x3=round(r-1.25u); x4=round(x3+.25u); y3=y1; y4=y3-as;
lft0x5=round 1.25u; x6=round(x5-.25u); y5=y1; y6=y5-as;
call `e arm(1,3,4); % upper right arm and serif
call `f arm(1,5,6). % upper left arm and serif
"The letter U";
call charbegin(`U,13,2sc(1-mi)+mc(.3phh.slant+pu),2sc-.5mc(rstem-pu),
phh,0,hic.rstem+.5mi.pu);
hpen;
if fixwidth≠0: lft4x1=round(1.5u); rt0x5=round(r-1.5u);
else: lft4x1=round 2u; rt0x5=round(r-2u);
fi;
x2=x1; x4=x5; x3=.5[x2,x4];
top4y1=hh; y5=y1; y2=y4=.36hh; bot0y3=-o;
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % left serif
call `c dserif(5,0,4,-ucs);
call `d dserif(5,0,4,ucs); % right serif
fi;
w4 draw 1..2; % upper left stroke
call `e arc(3,2,w4); % lower left stroke
w0 draw 3{1,0}..4{0,1}; % lower right stroke
draw 4..5. % upper right stroke
"The letter V";
call charbegin(`V,13,2sc+mc(phh.slant-pu),2sc-mc(rv-4pu),
phh,0,mi[rv,4pu]);
hpen; lft4x1=round 1.5u; rt0x4=round(r-1.5u);
x2-x1=x4-x3; lft0x3=lft4x2+del;
top4y1=hh; y4=y1; bot4y2=-o-oo; y3=y2;
w4 draw 1..2; w0 draw 2..3; % left diagonal stroke
rpen#; w4 draw 3..4; % erase excess at lower right
hpen; w0 draw 3..4; % right diagonal stroke
if ucs≠0: call `a serif(1,4,2,-ucs);
call `b serif(1,4,2,ucs); % left serif
call `c dserif(4,0,3,-ucs);
call `d dserif(4,0,3,ucs); % right serif
fi.
"The letter W";
call charbegin(`W,18,2sc+mc(phh.slant-.5pu),2sc-mc(rv-.75ucs.pu-2.5pu),
phh,0,mi[rv-.75ucs.pu,2.5pu]);
if fudge≠1: new w0,w4; % lines will be thinner in fudged styles
w0=round(fudge.pixels.pw+blacker); w4=round(fudge.pixels.pwiv+blacker);
fi;
hpen; lft4x1=round 1.5u;
rt0x9=rt4x10; x11-x10=x9-x1; rt0x11=r-1.5u;
% $x↓9$, $x↓{10}$, and $x↓{11}$ are approximations to $x↓4$, $x↓5$, and $x↓8$.
x5-x1=x6-x2=x7-x3=x8-x4=round(x10-x1);
% The idea is to draw two V's displaced by an integer amount.
top4y1=hh; bot4y2=-o-oo; y3=y6=y7=y2; y4=y5=y8=y1;
rt0x4=rt4x5; lft0x3=lft4x2+del; x2-x1=x4-x3;
w4 draw 1..2; w0 draw 2..3; % first diagonal
rpen#; w4 draw 3..4; % erase excess
hpen; w0 draw 3..4; % second diagonal
w4 draw 5..6; w0 draw 6..7; % third diagonal
rpen#; w4 draw 7..8; % erase excess
hpen; w0 draw 7..8; % fourth diagonal
if ucs≠0: call `a serif(1,4,2,-.75ucs);
if w0=w4: call `b serif(1,4,2,ucs);
else: call `b serif(1,4,2,.5ucs);
fi; % left serif
call `c serif(5,4,6,-.5ucs-del/u);
call `d serif(5,4,6,.5ucs); % middle serif
call `e dserif(8,0,7,-ucs);
call `f dserif(8,0,7,.75ucs); % right serif
fi;
if fudge≠1: new w0,w4; % restore normal sizes in fudged styles
w0=round(pixels.pw+blacker); w4=round(pixels.pwiv+blacker);
fi.
"The letter X";
call charbegin(`X,13,2sc,2sc-.5mc.rv,phh,0,hic.rv);
hpen; lft5x1=round 1.5u; rt5x4=round(r-1.5u); x3=x1; x4=x2;
top5y1=hh; bot5y4=0; y2=y1; y3=y4;
w5 draw 1..4; % upper left to lower right diagonal
w0 draw 3..2; % lower left to upper right diagonal
if ucs≠0: call `a serif(1,5,4,-ucs);
call `b serif(1,5,4,ucs); % upper left serif
call `c serif(4,5,1,-ucs);
call `d serif(4,5,1,ucs); % lower right serif
new ss; ss=.5(w5-w0)/u; % correction to \\{ucs} makes $w↓0$ like $w↓5$
call `e dserif(2,0,3,-ucs-ss);
call `f dserif(2,0,3,ucs+ss); % upper right serif
call `g dserif(3,0,2,-ucs-ss);
call `h dserif(3,0,2,ucs+ss); % lower left serif
fi.
"The letter Y";
call charbegin(`Y,13,2sc+mc(phh.slant-.5pu),2sc-mc(rv-4pu),
phh,0,mi[rv,4pu]);
hpen; lft5x1=round 1.5u; rt0x2=round(r-1.5u);
top5y1=top0y2=hh;
rt5x13=rt0x14; x13-x1=x2-x14; % approximations before rounding
x3=good5x13; rt5x3=rt4x6=rt0x4; lft0x9=lft5x3;
y3=y4=y6=y9=.48hh; y7=y8=.5[y5,y6]; bot4y5=0;
x5=x6=x8; lft0x7=lft4x8;
w5 draw 1..3; % left diagonal
minvr 0; minvs 0;
w0 ddraw 9{x3-x1,y3-y1}..7{0,-1}, 6..8; % transition
minvr .5; minvs .5;
w4 draw 6..5; % stem
w0 draw 4..2; % right diagonal
if ucs≠0: call `a serif(1,5,3,-ucs);
call `b serif(1,5,3,ucs); % upper left serif
call `c serif(5,4,6,-ucs);
call `d serif(5,4,6,ucs); % lower serif
call `e dserif(2,0,4,-ucs);
call `f dserif(2,0,4,ucs); % upper right serif
fi.
"The letter Z";
call charbegin(`Z,11,0,-.5mc(phh.slant-1.5pu),phh,0,hic(phh.slant-.5pu)+.5mi.pu);
hpen; lft5x2=round u; rt5x1=round(r-u);
top5y1=hh; bot5y2=0;
lft0x3=round 1.5u; x4=round(x3-.5u); y3=y1; y4=y3-as;
rt0x5=round(r-1.5u); x6=round(x5+.5u); y5=y2; y6=y5+1.2as;
call `a arm(1,3,4); % upper arm and serif
w5 draw 1..2; % diagonal
call `b arm(2,5,6). % lower arm and serif